package dachang.class1;

import javax.annotation.Resource;
import java.io.File;
import java.util.Stack;

/**
 * @Author: Dijah
 * @Date: 2023/5/23 21:07
 * @Desc:
 * 计算 一个文件夹下有多少文件，只统计文件，不计算文件夹（也统计隐藏文件）
 *
 * 思路：这个有点类似一个树型结构
 */
public class code2_CountFiles {

    public static int getFileNumber(String folderPath){
        File root = new File(folderPath);
        if(!root.isDirectory() && !root.isFile()){
            return 0;
        }
        if(root.isFile()){
            return 1;
        }
        //这里也可用使用队列，类似BFS框架遍历一样
        //使用栈
        Stack<File> stack = new Stack<>();
        stack.add(root);
        int files = 0;
        while (!stack.isEmpty()){
            File folder = stack.pop();
            for(File next : folder.listFiles()){
                if(next.isFile()){
                    //如果是文件
                    files++;
                }
                if(next.isDirectory()){
                    //如果是文件夹，放到栈中
                    stack.push(next);
                }
            }
        }
        return files;
    }

    public static void main(String[] args) {
        String path = "D:\\adv";
        System.out.println(getFileNumber(path));
    }
}
